# -*- coding: utf-8 -*-
# @Time : 2022/6/25 22:30
# @Author : zgj
# @File : cmd_utils.py
import os
import subprocess
import time
from pathlib import Path

from loguru import logger

from common.hd_log import mylog


def cmd(cmd_str: str):
   """
   执行shell命令
   :param cmd_str: 字符串命令
   :return:
   """
   try:
       mylog.info(f'执行的命令：{cmd_str}')

       p = subprocess.Popen([cmd_str], shell=True, stdout=subprocess.PIPE,
                            stderr=subprocess.PIPE, encoding='utf-8')
       stdout, stderr = p.communicate()
       # 打印标准输出和标准错误输出内容，方便查看命令执行的详细情况（可根据实际需求选择是否保留）
       mylog.info(f"命令执行的标准输出：{stdout}")
       mylog.info(f"命令执行的标准错误输出：{stderr}")

       return p.returncode
   except Exception as e:
       mylog.error(f"{cmd_str} 命令执行失败,错误信息: {str(e)}")
       raise e

def check_file_exists(path, target_file, total_timeout_seconds):
    """
    在指定时间内轮询检查指定路径下是否存在目标文件。

    :param path: 要检查的路径
    :param target_file: 要查找的目标文件名称
    :param total_timeout_seconds: 轮询的总时间（秒）
    :return: 如果在超时时间内找到目标文件则返回 True，否则返回 False
    """
    start_time = time.time()
    while True:
        if os.path.isfile(os.path.join(path, target_file)):
            return True
        elapsed_time = time.time() - start_time
        if elapsed_time > total_timeout_seconds:
            mylog.info(f"在{total_timeout_seconds}秒内未找到文件{target_file}")
            return False
        time.sleep(3)


if __name__ == '__main__':
    current_file_path = os.path.abspath(__file__)
    path_obj = Path(current_file_path)
    project_path = path_obj.parents[2]
    script_path = os.path.join(project_path, 'data')
    mylog.info(f'jmeter 脚本路径：{script_path}')
    course_id = 'f51a81635a05916e079602b730d9061b'
    cmd_str1 = f'cd {script_path} && rm -rf room_grouping.jtl && rm -rf jmeter.log'
    cmd(cmd_str1)
    try:
        is_deleted = check_file_exists(script_path, 'room_grouping.jtl', 3)
        if is_deleted is True:
            mylog.info('room_grouping.jtl 文件已删除')

    except Exception as e:
        mylog.error(f'{e}')

    cmd_str2 = f'cd {script_path} && jmeter -n -t ./room_grouping.jmx -Jcourse_id={course_id} -l room_grouping.jtl'
    cmd(cmd_str2)
    is_exists = check_file_exists(script_path, 'room_grouping.jtl', 60)
    if is_exists is False:
        mylog.error(f'jmeter 脚本路径：{script_path}下没有 room_grouping.jtl 文件，请检查脚本是否执行成功')
        raise RuntimeError(f'jmeter 脚本路径：{script_path}下没有 room_grouping.jtl 文件，请检查脚本是否执行成功')
    print('ok')
